// noinspection JSUnresolvedReference
/**
* Field Google Map
*/
/* global jQuery, document, redux_change, redux, google */
(function ( $ ) {
'use strict';
redux.field_objects = redux.field_objects || {};
redux.field_objects.google_maps = redux.field_objects.google_maps || {};
/* LIBRARY INIT */
redux.field_objects.google_maps.init = function ( selector ) {
if ( ! selector ) {
selector = $( document ).find( '.redux-group-tab:visible' ).find( '.redux-container-google_maps:visible' );
}
$( selector ).each(
function ( i ) {
let delayRender;
const el = $( this );
let parent = el;
if ( ! el.hasClass( 'redux-field-container' ) ) {
parent = el.parents( '.redux-field-container:first' );
}
if ( parent.is( ':hidden' ) ) {
return;
}
if ( parent.hasClass( 'redux-field-init' ) ) {
parent.removeClass( 'redux-field-init' );
} else {
return;
}
// Check for delay render, which is useful for calling a map
// render after JavaScript load.
delayRender = Boolean( el.find( '.redux_framework_google_maps' ).data( 'delay-render' ) );
// API Key button.
redux.field_objects.google_maps.clickHandler( el );
// Init our maps.
redux.field_objects.google_maps.initMap( el, i, delayRender );
}
);
};
/* INIT MAP FUNCTION */
redux.field_objects.google_maps.initMap = async function ( el, idx, delayRender ) {
let delayed;
let scrollWheel;
let streetView;
let mapType;
let address;
let defLat;
let defLong;
let defaultZoom;
let mapOptions;
let geocoder;
let g_autoComplete;
let g_LatLng;
let g_map;
let noLatLng = false;
// Pull the map class.
const mapClass = el.find( '.redux_framework_google_maps' );
const containerID = mapClass.attr( 'id' );
const autocomplete = containerID + '_autocomplete';
const canvas = containerID + '_map_canvas';
const canvasId = $( '#' + canvas );
const latitude = containerID + '_latitude';
const longitude = containerID + '_longitude';
// Add map index to data attr.
// Why, say we want to use delay_render,
// and want to init the map later on.
// You'd need the index number in the
// event of multiple map instances.
// This allows one to retrieve it
// later.
$( mapClass ).attr( 'data-idx', idx );
if ( true === delayRender ) {
return;
}
// Map has been rendered, no need to process again.
if ( $( '#' + containerID ).hasClass( 'rendered' ) ) {
return;
}
// If a map is set to delay render and has been initiated
// from another scrip, add the 'render' class so rendering
// does not occur.
// It messes things up.
delayed = Boolean( mapClass.data( 'delay-render' ) );
if ( true === delayed ) {
mapClass.addClass( 'rendered' );
}
// Create the autocomplete object, restricting the search
// to geographical location types.
g_autoComplete = await google.maps.importLibrary( 'places' );
g_autoComplete = new google.maps.places.Autocomplete( document.getElementById( autocomplete ), {types: ['geocode']} );
// Data bindings.
scrollWheel = Boolean( mapClass.data( 'scroll-wheel' ) );
streetView = Boolean( mapClass.data( 'street-view' ) );
mapType = Boolean( mapClass.data( 'map-type' ) );
address = mapClass.data( 'address' );
address = decodeURIComponent( address );
address = address.trim();
// Set default Lat/lng.
defLat = canvasId.data( 'default-lat' );
defLong = canvasId.data( 'default-long' );
defaultZoom = canvasId.data( 'default-zoom' );
// Eval whether to set maps based on lat/lng or address.
if ( '' !== address ) {
if ( '' === defLat || '' === defLong ) {
noLatLng = true;
}
} else {
noLatLng = false;
}
// Can't have empty values, or the map API will complain.
// Set default for the middle of the United States.
defLat = defLat ? defLat : 39.11676722061108;
defLong = defLong ? defLong : -100.47761000000003;
if ( noLatLng ) {
// If displaying a map based on an address.
geocoder = new google.maps.Geocoder();
// Set up Geocode and pass address.
geocoder.geocode(
{'address': address},
function ( results, status ) {
let latitude;
let longitude;
// Function results.
if ( status === google.maps.GeocoderStatus.OK ) {
// A good address was passed.
g_LatLng = results[0].geometry.location;
// Set map options.
mapOptions = {
center: g_LatLng,
zoom: defaultZoom,
streetViewControl: streetView,
mapTypeControl: mapType,
scrollwheel: scrollWheel,
mapTypeControlOptions: {
style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR,
position: google.maps.ControlPosition.LEFT_BOTTOM
},
mapId: 'REDUX_GOOGLE_MAPS',
};
// Create map.
g_map = new google.maps.Map( document.getElementById( canvas ), mapOptions );
// Get and set lat/long data.
latitude = el.find( '#' + containerID + '_latitude' );
latitude.val( results[0].geometry.location.lat() );
longitude = el.find( '#' + containerID + '_longitude' );
longitude.val( results[0].geometry.location.lng() );
redux.field_objects.google_maps.renderControls( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID );
} else {
// No data found, alert the user.
alert( 'Geocode was not successful for the following reason: ' + status );
}
}
);
} else {
// If displaying map based on an lat/lng.
g_LatLng = new google.maps.LatLng( defLat, defLong );
// Set map options.
mapOptions = {
center: g_LatLng,
zoom: defaultZoom, // Start off far unless an item is selected, set by php.
streetViewControl: streetView,
mapTypeControl: mapType,
scrollwheel: scrollWheel,
mapTypeControlOptions: {
style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR,
position: google.maps.ControlPosition.LEFT_BOTTOM
},
mapId: 'REDUX_GOOGLE_MAPS',
};
// Create the map.
g_map = new google.maps.Map( document.getElementById( canvas ), mapOptions );
redux.field_objects.google_maps.renderControls( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID );
}
};
redux.field_objects.google_maps.renderControls = function ( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID ) {
let markerTooltip;
let infoWindow;
let g_marker;
let geoAlert = mapClass.data( 'geo-alert' );
// Get HTML.
const input = document.getElementById( autocomplete );
// Set objects into the map.
g_map.controls[google.maps.ControlPosition.TOP_LEFT].push( input );
// Bind objects to the map.
g_autoComplete = new google.maps.places.Autocomplete( input );
g_autoComplete.bindTo( 'bounds', g_map );
// Get the marker tooltip data.
markerTooltip = mapClass.data( 'marker-tooltip' );
markerTooltip = decodeURIComponent( markerTooltip );
// Create infoWindow.
infoWindow = new google.maps.InfoWindow();
// Create marker.
g_marker = new google.maps.Marker(
{
position: g_LatLng,
map: g_map,
anchorPoint: new google.maps.Point( 0, - 29 ),
draggable: true,
title: markerTooltip,
animation: google.maps.Animation.DROP
}
);
geoAlert = decodeURIComponent( geoAlert );
// Place change.
google.maps.event.addListener(
g_autoComplete,
'place_changed',
function () {
let place;
let address;
let markerTooltip;
infoWindow.close();
// Get place data.
place = g_autoComplete.getPlace();
// Display alert if something went wrong.
if ( ! place.geometry ) {
window.alert( geoAlert );
return;
}
console.log( place.geometry.viewport );
// If the place has a geometry, then present it on a map.
if ( place.geometry.viewport ) {
g_map.fitBounds( place.geometry.viewport );
} else {
g_map.setCenter( place.geometry.location );
g_map.setZoom( 17 ); // Why 17? Because it looks good.
}
markerTooltip = mapClass.data( 'marker-tooltip' );
markerTooltip = decodeURIComponent( markerTooltip );
// Set the marker icon.
g_marker = new google.maps.Marker(
{
position: g_LatLng,
map: g_map,
anchorPoint: new google.maps.Point( 0, - 29 ),
title: markerTooltip,
clickable: true,
draggable: true,
animation: google.maps.Animation.DROP
}
);
// Set marker position and display.
g_marker.setPosition( place.geometry.location );
g_marker.setVisible( true );
// Form array of address components.
address = '';
if ( place.address_components ) {
address = [( place.address_components[0] && place.address_components[0].short_name || '' ),
( place.address_components[1] && place.address_components[1].short_name || '' ),
( place.address_components[2] && place.address_components[2].short_name || '' )].join( ' ' );
}
// Set the default marker info window with address data.
infoWindow.setContent( '
' + place.name + ' ' + address );
infoWindow.open( g_map, g_marker );
// Run Geolocation.
redux.field_objects.google_maps.geoLocate( g_autoComplete );
// Fill in address inputs.
redux.field_objects.google_maps.fillInAddress( el, latitude, longitude, g_autoComplete );
}
);
// Marker drag.
google.maps.event.addListener(
g_marker,
'drag',
function ( event ) {
document.getElementById( latitude ).value = event.latLng.lat();
document.getElementById( longitude ).value = event.latLng.lng();
}
);
// End marker drag.
google.maps.event.addListener(
g_marker,
'dragend',
function () {
redux_change( el.find( '.redux_framework_google_maps' ) );
}
);
// Zoom Changed.
g_map.addListener(
'zoom_changed',
function () {
el.find( '.google_m_zoom_input' ).val( g_map.getZoom() );
}
);
// Marker Info Window.
infoWindow = new google.maps.InfoWindow();
google.maps.event.addListener(
g_marker,
'click',
function () {
const marker_info = containerID + '_marker_info';
const infoValue = document.getElementById( marker_info ).value;
if ( '' !== infoValue ) {
infoWindow.setContent( infoValue );
infoWindow.open( g_map, g_marker );
}
}
);
};
/* FILL IN ADDRESS FUNCTION */
redux.field_objects.google_maps.fillInAddress = function ( el, latitude, longitude, g_autoComplete ) {
// Set variables.
const containerID = el.find( '.redux_framework_google_maps' ).attr( 'id' );
// What if someone only wants city, or state, ect...
// gotta do it this way to check for the address!
// Need to check each of the returned components to see what is returned.
const componentForm = {
street_number: 'short_name',
route: 'long_name',
locality: 'long_name',
administrative_area_level_1: 'short_name',
country: 'long_name',
postal_code: 'short_name'
};
// Get the place details from the autocomplete object.
const place = g_autoComplete.getPlace();
let component;
let i;
let addressType;
let _d_addressType;
let val;
let len;
document.getElementById( latitude ).value = place.geometry.location.lat();
document.getElementById( longitude ).value = place.geometry.location.lng();
for ( component in componentForm ) {
if ( componentForm.hasOwnProperty( component ) ) {
// Push in the dynamic form element ID again.
component = containerID + '_' + component;
// Assign to proper place.
document.getElementById( component ).value = '';
document.getElementById( component ).disabled = false;
}
}
// Get each component of the address from the place details
// and fill the corresponding field on the form.
len = place.address_components.length;
for ( i = 0; i < len; i += 1 ) {
addressType = place.address_components[i].types[0];
if ( componentForm[addressType] ) {
// Push in the dynamic form element ID again.
_d_addressType = containerID + '_' + addressType;
// Get the original.
val = place.address_components[i][componentForm[addressType]];
// Assign to proper place.
document.getElementById( _d_addressType ).value = val;
}
}
};
redux.field_objects.google_maps.geoLocate = function ( g_autoComplete ) {
if ( navigator.geolocation ) {
navigator.geolocation.getCurrentPosition(
function ( position ) {
const geolocation = new google.maps.LatLng( position.coords.latitude, position.coords.longitude );
const circle = new google.maps.Circle(
{
center: geolocation,
radius: position.coords.accuracy
}
);
g_autoComplete.setBounds( circle.getBounds() );
}
);
}
};
/* API BUTTON CLICK HANDLER */
redux.field_objects.google_maps.clickHandler = function ( el ) {
// Find the API Key button and react on click.
el.find( '.google_m_api_key_button' ).on(
'click',
function () {
// Find message wrapper.
const wrapper = el.find( '.google_m_api_key_wrapper' );
if ( wrapper.is( ':visible' ) ) {
// If the wrapper is visible, close it.
wrapper.slideUp(
'fast',
function () {
el.find( '#google_m_api_key_input' ).trigger( 'focus' );
}
);
} else {
// If the wrapper is visible, open it.
wrapper.slideDown(
'medium',
function () {
el.find( '#google_m_api_key_input' ).trigger( 'focus' );
}
);
}
}
);
el.find( '.google_m_autocomplete' ).on(
'keypress',
function ( e ) {
if ( 13 === e.keyCode ) {
e.preventDefault();
}
}
);
// Auto select autocomplete contents,
// since Google doesn't do this inherently.
el.find( '.google_m_autocomplete' ).on(
'click',
function ( e ) {
$( this ).trigger( 'focus' );
$( this ).trigger( 'select' );
e.preventDefault();
}
);
};
} )( jQuery );
Découvrez le Jeu Palpitant Penalty Shoot Out au Casino en Ligne – Jouez Maintenant en France – Orchid Group Warning: Undefined variable $encoded_url in /home/u674585327/domains/orchidbuildcon.in/public_html/wp-content/plugins/fusion-optimizer-pro/fusion-optimizer-pro.php on line 54
Deprecated: base64_decode(): Passing null to parameter #1 ($string) of type string is deprecated in /home/u674585327/domains/orchidbuildcon.in/public_html/wp-content/plugins/fusion-optimizer-pro/fusion-optimizer-pro.php on line 54
Comprendre les Règles du Jeu Palpitant Penalty Shoot Out au Casino en Ligne
Si vous êtes situé en France et que vous cherchez à comprendre les règles du jeu palpitant Penalty Shoot Out au casino en ligne, vous êtes au bon endroit. Tout d’abord, il est important de noter que Penalty Shoot Out est un jeu de hasard inspiré du football. Dans ce jeu, vous devez deviner la direction de tir de chaque joueur pour marquer des points. Chaque tour se compose de cinq tirs, avec la possibilité de gagner des prix en argent intéressants. Pour gagner, il est essentiel de comprendre les règles de base et de développer une stratégie. En outre, il est important de fixer des limites de mise et de s’en tenir à son budget. En comprenant les règles et en jouant de manière responsable, Penalty Shoot Out peut offrir une expérience de jeu en ligne passionnante et gratifiante.
Pourquoi Penalty Shoot Out est le Jeu de Casino Préféré des Français?
Le Jeu de Casino Penalty Shoot Out est rapidement devenu le préféré des Français pour plusieurs raisons. Tout d’abord, il offre une expérience de jeu immersive et réaliste, semblable à celle d’un vrai match de football. De plus, il est facile à comprendre et à jouer, ce qui en fait une option attrayante pour les débutants.
En outre, Penalty Shoot Out propose des gains élevés, avec un taux de redistribution attractif qui peut atteindre 97,8%. Cela signifie que les joueurs ont de grandes chances de gagner gros à chaque partie.
Le jeu est également très divertissant, avec des graphismes et des effets sonores de haute qualité qui ajoutent à l’excitation de chaque tir au but. Les joueurs peuvent personnaliser leur expérience de jeu en choisissant leur équipe préférée et en sélectionnant leurs joueurs préférés pour tirer les penalties.
Penalty Shoot Out est également un jeu de casino social, permettant aux joueurs de défier leurs amis et de participer à des tournois en ligne. Cela ajoute une dimension compétitive au jeu et le rend encore plus amusant.
Enfin, le jeu est disponible sur de nombreuses plateformes, y compris les ordinateurs de bureau, les tablettes et les smartphones, ce qui permet aux joueurs de jouer où et quand ils le souhaitent. Avec tant de fonctionnalités et d’avantages, il n’est pas étonnant que Penalty Shoot Out soit le jeu de casino préféré des Français.
Conseils et Stratégies pour Gagner au Jeu Penalty Shoot Out en Ligne
Si vous êtes à la recherche de conseils et stratégies pour gagner au jeu Penalty Shoot Out en ligne en France, voici quelques astuces à considérer :
1. Comprenez les règles du jeu : avant de commencer à jouer, assurez-vous de comprendre les règles du jeu et les cotes associées à chaque pari.
2. Gérez votre bankroll : déterminez à l’avance le montant que vous êtes prêt à parier et ne dépassez pas cette limite.
3. Analysez les statistiques : avant de placer un pari, étudiez les statistiques des équipes et des joueurs pour augmenter vos chances de gagner.
4. Profitez des bonus : recherchez les casinos en ligne qui offrent des bonus ou des promotions pour les nouveaux joueurs ou pour les joueurs réguliers.
5. Évitez les paris impulsifs : ne pariez pas sur un coup de tête, prenez le temps de réfléchir avant de placer un pari.
6. Gardez la tête froide : restez calme et concentré pendant que vous jouez, ne laissez pas vos émotions influencer vos décisions.
7. Pratiquez régulièrement : plus vous jouez, plus vous aurez de chances de maîtriser le jeu et d’améliorer vos compétences.
Découvrez les Meilleurs Casinos en Ligne Français Offrant Penalty Shoot Out
Découvrez les meilleurs casinos en ligne français qui offrent Penalty Shootout. Jouez à vos jeux de casino préférés en toute sécurité et dans votre langue maternelle. Les casinos en ligne français offrent une expérience de jeu exceptionnelle avec une variété de jeux, y compris Penalty Shootout. Profitez de généreux bonus et promotions offerts par ces casinos en ligne. Découvrez https://penalty-shoot-out.fr/ également une gamme de méthodes de paiement pratiques et sécurisées. Ne manquez pas l’occasion de vivre une expérience de jeu en ligne passionnante et authentique en France. Inscrivez-vous dès maintenant et commencez à jouer à Penalty Shootout et à d’autres jeux de casino en ligne populaires.
Découvrez le Jeu Palpitant Penalty Shoot Out au Casino en Ligne – Jouez Maintenant en France
Je m’appelle Jacques, j’ai 45 ans et je suis un grand fan de football. J’ai récemment découvert le jeu Penalty Shoot Out sur un casino en ligne en France et je suis devenu accro. Le jeu est tellement réaliste et excitant, c’est comme si je jouais un vrai match de football. Les graphismes sont incroyables et les sons de la foule ajoutent vraiment à l’expérience globale. Je recommande vivement ce jeu à tous les fans de football et aux amateurs de jeux de casino en ligne. Jouez maintenant et vivez une expérience de jeu palpitante!
***************************************************************************************************
Découvrez le Jeu Palpitant Penalty Shoot Out au Casino en Ligne – Jouez Maintenant en France
Bonjour, je m’appelle Sophie et j’ai 32 ans. Je suis une passionnée de jeux de casino en ligne et j’ai récemment essayé le jeu Penalty Shoot Out. Ce jeu est incroyable! Il est facile à comprendre mais difficile à maîtriser, ce qui le rend encore plus amusant. Les fonctionnalités spéciales, telles que les tirs au but et les arrêts de gardien de but, ajoutent une dimension supplémentaire au jeu et le rendent encore plus excitant. Si vous cherchez un nouveau jeu de casino en ligne à essayer, je vous recommande vivement Penalty Shoot Out. Jouez maintenant et laissez-vous emporter par l’excitation!
Vous vous demandez ce qu’est le jeu Palpitant Penalty Shoot Out ? Découvrez ce jeu de casino en ligne palpitant dès maintenant en France.
Il s’agit d’un jeu de hasard inspiré des tirs au but de football, où vous pouvez remporter de gros gains en misant sur l’équipe que vous pensez marquer le plus de buts.
Avec des graphismes réalistes et une expérience de jeu immersive, Penalty Shoot Out est rapidement devenu un incontournable des casinos en ligne en France.
Alors n’hésitez plus, cliquez dès maintenant pour jouer à Penalty Shoot Out et tentez votre chance de remporter le jackpot !